<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      編程 & 生活 -- 西西吹雪

      開心工作,快樂生活 (原創文章,轉載請注明出處)

      導航

      我開發共享軟件的三次經歷(上):打造一款很多人用的軟件

      共享軟件這個詞,如今似乎離我們已經越來越遙遠了。還有人有用WinZip嗎?還有人記得netants嗎?這些輝煌一時的明星,已逐漸消失在人們的視野中。今天已經是免費軟件的世界。互聯網行業的巨頭們,打造的免費模式,給共享軟件敲響了喪鐘。

      共享軟件,曾經寄托了多少程序員們創業致富的夢想。我也曾加入共享軟件的大潮中,用業余時間開發過差不多近十個共享軟件,最后它們大都灰飛煙滅了,但其中三次經歷,還是給我的程序員生涯留下了難以磨滅的記憶。

      第一個:隱藏專家

      只賺了不到一千塊。雖然一直處于自生自滅的狀態,但卻用戶數最多。05年的時候曾統計過各大網站的下載量,當時就達十幾萬的下載量,時至今日,相信用過這個軟件的人數,絕不是一個小數目。盡管差不多十年沒有更新了,仍然不時有用戶找到我要注冊碼,或者提出改進建議。曾經在《電腦報》上被刊文介紹,還被收錄到幾本雜志的光盤中。

      第二個:淘寶發布大王

      賺到了十萬多一點。這一次總算把握住了先機,模仿者無數。后來由于環境變化,軟件失去了價值,自然消失。雖然賺的錢不算多,但卻在一定程度上改變了我的生活,因為靠著這十萬元,在這個寸土寸金的大城市里,我終于有了一塊自己的立足之地。

      第三個:易創招標通

      這次野心最大,花我精力最多,卻只賺了幾千塊,最后徹底放棄。這一次給我留下了太多的經驗教訓,估計一輩子我也不會忘記。

            本人拙作《程序員第二步-從程序員到項目經理》已經由人民郵電出版社出版,當當網京東網均可預訂,謝謝各位園友們的長期大力支持!

       

      第一篇:隱藏專家-打造一款很多人用的軟件

      從當程序員的那一天起,我就一起有一個夢想,就是開發一款有很多人用的軟件,果能如此的話,這一生也算是有所價值,沒有白過。我第一次開發的共享軟件,隱藏專家,差點就實現了我的這個夢想。雖然一直處于自生自滅的狀態,但用戶并不少,光多特網站的下載量就達5萬多,相信用過這款軟件的人,總該有幾十萬吧。盡管差不多十年沒有更新了,仍然不時有用戶找到我要注冊碼,或者提出改進建議。曾經在《電腦報》上被刊文介紹,還被收錄到幾本雜志的光盤中。

      隱藏專家是一個很簡單的軟件,它的功能可以用一句話說清楚:按下快捷鍵,立即隱藏指定的窗口和托盤圖標。開發這個軟件,最開始是給自己用的,當看到領導朝這邊走來時,我輕輕按下Alt+X,QQ窗口、IE瀏覽器,連接QQ托盤圖標全部都會消失的得無影無蹤。

      隱藏專家是2002年用Delphi開發的。寫這個軟件,還有一個目的,就是學習。我當時對于寫程序還是初入門,對于程序代碼是怎樣工作的,還一點也不懂。通過開發隱藏專家,我對Windows消息機制,終于有了比較清楚的認識,同時也學會了不少Windows API的用法。

      這里要感謝一下“大富翁論壇”,這是一個當年非常火爆的Delphi技術論壇,從上面我下載了一個近300M的離線資料,至今還保存在我的移動硬盤上。我幾乎把每一篇都看過,實在是受益匪淺,可以說,大富翁論壇就是我的啟蒙老師。

        

      下面介紹一下這個小軟件所用的到一些關鍵技術:

      1.窗口隱藏:

      要隱藏窗口,首先要找到窗口,就是遍歷所有的窗口(FinWindow, GetWindow兩個API),然后看窗口標題文字是否符合設定的條件,如果符合,就隱藏或顯示該窗口(ShowWindow),這些都是通過Windows API來實現的。

      主要代碼如下所示:

      //顯示或隱藏標題在winlist中的所有窗口。
      procedure HideWindow(WinList:TStringList);
      var
        hCurWindow:HWND;
        WinText:Array[0..255of char;
        i:integer;
      begin
        if winList = nil then exit;
          hCurWindow:=GetWindow(FindWindow('Shell_TrayWnd',nil),GW_HWNDFirst);
        While hCurWindow<>0 do
        begin
           if GetWindowText(hCurWindow,@WinText,255)>0 then
           begin
              for i:=0 to winlist.Count-1 do
              begin
                 if pos(lowercase(winlist.Strings[i]),lowercase(StrPas(@Wintext)))>0 then
                 begin
                   if IsShow then
                     begin
                       //隱藏窗口
                       ShowWindow(GetWindow(hCurWindow,GW_OWNER),SW_HIDE);
                       ShowWindow(hCurWindow,SW_HIDE);
                     end
                   else
                     begin
                       ShowWindow(GetWindow(hCurWindow,GW_OWNER),SW_SHOW);
                       ShowWindow(hCurWindow,SW_SHOW);
                     end;
                 end;
              end;
           end;
           hCurWindow:=GetWindow(hCurWindow,GW_HWNDNEXT);
        end;
      end;

      2.托盤圖標隱藏

      這個功能網上基本上沒什么資料,費了我不少時間。經過長時間的琢磨,終于找到了解決之道。我用spy++觀察托盤區,發現圖標都在一個類名為ToolbarWindow32的工具條窗口中,既然如此,應該可以有相應的方法,讀出工具條某個按鈕的文字信息,以及通過發送消息將其顯示或隱藏。順滕模瓜,最后終于找到了解決方法:

       

      //取得托盤區圖標列表所在的窗口句柄,是一個toolbarwindow32類的工具條
      function GetTrayHandle():THandle;   
      var
       wnd,wnd2:HWND;
      begin
        wnd := FindWindow('Shell_TrayWnd',nil);
        wnd2 := FindWindowEx(wnd,0,'TrayNotifyWnd',nil);
        wnd := FindWindowEx(wnd2,0,'ToolbarWindow32',nil);
        if wnd=0 then
        begin
          wnd := FindWindowEx(wnd2,0,'TrayClockWClass',nil);
          wnd := GetNextWindow(wnd,GW_HWNDNEXT);
          wnd := FindWindowEx(wnd,0,'ToolbarWindow32',nil);
          result := wnd;
        end
        else
          result := wnd;
      end;

      //隱藏托盤圖標的函數
      procedure HideIcon(strHint:string;bHide:boolean);
      var
       nItemCount,i:integer;
       chBuffer:array[0..255of char;
       dwProcessID:DWORD;
       hProcess:Cardinal;
       adPointer:Pointer;
       nNumberOfBytesRead:Cardinal;
       bi:TTBBUTTON;
       hWindow:THandle;
       str1,str2:string;
      begin
        str1 := lowercase(strHint);
        hWindow := GetTrayHandle;
        nItemCount := SendMessage(hWindow, TB_BUTTONCOUNT, 00);
        GetWindowThreadProcessId(hWindow, @dwProcessID);
        hProcess := OpenProcess(PROCESS_VM_OPERATION + PROCESS_VM_READ + PROCESS_VM_WRITE,
                          false,
                          dwProcessID);
        adPointer := VirtualAllocEx(hProcess,
                                  nil,
                                  4096,
                                  MEM_RESERVE + MEM_COMMIT,
                                  PAGE_READWRITE);
          try
            for i:=0 to nItemCount do
            begin
                 //獲取工具條按鈕的提示文字信息
               SendMessage(hWindow, TB_GETBUTTON, i, integer(adPointer));
               ReadProcessMemory(hProcess,
                                (adPointer),
                                @bi,
                                sizeof(bi),
                                nNumberOfBytesRead);
               SendMessage(hWindow, TB_GETBUTTONTEXT , bi.idCommand, integer(adPointer));
               ReadProcessMemory(hProcess,
                            adPointer,
                            @chBuffer,
                            sizeof(chBuffer),
                            nNumberOfBytesRead);

              //比對文字,判斷是否為要隱藏的圖標
              str2:= lowercase(chBuffer);
              if pos(str1,str2)>0 then
              begin
                if bHide then
                  sendmessage(hWindow,TB_HIDEBUTTON,bi.idCommand,makelong(1,0))
                else
                  sendmessage(hWindow,TB_HIDEBUTTON,bi.idCommand,makelong(0,0));
                exit;
              end;
            end
          finally
             VirtualFreeEx(hProcess,
                          adPointer,
                          0,
                          MEM_RELEASE);
            CloseHandle(hProcess);
          end;
      end;

      3.全局熱鍵注冊

      隱藏窗口的快捷鍵必須在任何情況下都可以使用,主要用到一個API函數:RegisterHotKey,如果取消注冊,則調用UnRegisterHotKey。

      軟件還有一個屏蔽用戶鍵盤和鼠標輸入的功能,當屏蔽時,用戶不能進行任何鍵盤和鼠標的操作,就像死機了一樣,這個功能需要另一個API函數來實現,就是SetWindowsHookEx,這個函數可以設置一個全局鉤子,“鉤住”鍵盤消息和鼠標消息,自己進行處理。如果要取消鉤子,則調用unhookWindowsHookEx函數來實現。

       

      隱藏專家這個軟件,總共收了不到1000元注冊費,其中還有幾百塊是在天空軟件站的賬戶,由于我長期沒有去維護,后來竟然發現被賬戶被注銷了,至于這幾百塊錢,也不知所蹤。更讓人生氣的是,隱藏專家在天空軟件站上也不翼而飛,再也找不到了。隱藏專家從定位來說,應該說還是抓住了不少用戶的心理,具有不錯的實用性。之所以沒有成功,我將原因歸結為三點:一是包裝不夠;二是缺乏營銷;三是國內共享軟件的生存環境不佳。

      這一次經歷,讓我明白了做共享軟件賺錢并不容易,特別針對國內市場。后來我看到一篇文章,講一個程序員做了一個mp3轉CD的軟件,在國外市場一個月可以收到5萬美金的注冊費,原來小軟件確實是可以賺大錢的。我動了心,可惜由于功力未夠,一直未能將其推廣到國外,總歸是一件遺憾的事情。

      不過到今天,我想是該發布一個永久免費版了,既然賺不到錢,何不免費讓更多人來用,這不也能有助于達成我很久以前的心愿——開發一款很多人用的軟件嗎?只要有人還要用它,也許也算是一種成功吧。

        ---------------------------------

              本人拙作《程序員第二步--從程序員到項目經理》已經由人民郵電出版社出版,謝謝各位園友的長期支持!

              當當網:http://product.dangdang.com/23365823.html 

              京東網:http://item.jd.com/11350488.html     

       

      posted on 2013-11-26 10:00  西西吹雪  閱讀(15885)  評論(49)    收藏  舉報

      主站蜘蛛池模板: 福清市| 双城市| 国产偷拍自拍视频在线观看| 亚洲av乱码一区二区| 国产精品爱久久久久久久| 香蕉EEWW99国产精选免费| 极品少妇的粉嫩小泬看片 | 一区二区三区激情都市| 高清国产精品人妻一区二区| 国产日韩AV免费无码一区二区三区| 中文字幕有码在线第十页| 午夜免费无码福利视频麻豆| 国产亚洲精品综合一区二区| 日韩av片无码一区二区不卡| 成人免费A级毛片无码片2022| 亚洲欧美日韩综合一区在线 | 欧洲美熟女乱又伦AV影片| 国产午夜福利av在线麻豆| 韩国午夜福利片在线观看| 精品亚洲欧美高清不卡高清| 国产三级a三级三级| 敖汉旗| 中文字幕av日韩有码| 中文字幕人妻中文AV不卡专区| 97精品伊人久久大香线蕉APP | 2021亚洲va在线va天堂va国产| 国产精品视频全国免费观看 | 日韩人妻无码精品无码中文字幕 | 把女人弄爽大黄A大片片 | 国产在线拍揄自揄拍无码视频 | 亚洲欧美激情在线一区| 宫西光有码视频中文字幕| 亚洲日韩久久综合中文字幕| 青青狠狠噜天天噜日日噜| 国产极品粉嫩福利姬萌白酱| 国产精品国产精品偷麻豆| 国产成人精品午夜福利在线观看| 亚洲国产精品成人av网| 亚洲AV成人无码久久精品四虎| 国产不卡一区二区四区| 高要市|