亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 第20章 雜項.txt

?? 我自己整理的c語言教程 來自 c語言之家
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
 # include <dos. h>
 # include <windows. h>
 DWORD FAR PASCAL  __loadds KeyBoardProc(int,WORD,DWORD);
 static FARPROC nextKeyboardFilter=NULL;
                                                             
 BOOL shiftKeyDown ,ctrlIKeyDown ;
 # define REPEAT-COUNT       0x000000FF       / * test key repeat * /
 # define KEY_WAS_UP         0x80000000        / * test WM_KEYUP * /
 # define ALT KEY_DWN        0x20000000        / * test ALT key state * /
 # define EAT_THE_KEY         1                   /* swallow keystroke * /
 # define SEND_KEY ON         0                  /* act on keystroke ~ /
 BOOL useAltKey=TRUE;        / * use Alt key in sequence * /
 BOOL useCtrlKey=TRUE;       / * also use Ctrl key * /
 BOOL useShiftKey=FALSE;      / * don't use Shift key * /
 / * Entry point into the DLL. Do all necessary initialization here * /
 int FAR PASCAL LibMain (hModule,wDataSeg,cbHeapSize,lpszCmdLine)
 HANDLE hModule ;
 WORD wDataSeg ;
 WORD cbHeapSize ;
 LPSTR lpszCmdLine ;
       / * initialize key state variables to zero * /
       shiftKeyDown = 0 ;
       ctrlKeyDown = 0 ;
       return 1 ;
   /* The keyboard filter searches for the hotkey key sequence.
      If it gets it, it eats the key and displays a message box.
      Any other key is sent on to Windows. * /
 DWORD FAR PASCAL    _loadds
 KeyBoardProc (int nCode, WORD wParam, DWORD lParam)
     BOOL fCallDefProc ;
     DWORD dwResult = 0 ;
     dwResult=SEND_KEY_ON ;       / * default to send key on * /
     fCallDefProc=TRUE;               / * default to calling DefProc * /
switch (nCode) {
     case HC ACTION :
     case HC-NOREMOVE :
           / * If key is Shift , save it * /
           if (wParam= = (WORD)VK_SHIFT) (
                 shiftKeyDown = ( (1Param & KEY_WAS_UP) ? 0 : 1 ) ;
                 break ;
           / * If key is Ctrl,save it * /
           else if(wParam= = (WORD)VK_CONTROL) {
                 ctrlKeyDown=((lParam & KEY WAS UP)? 0:1);
                 break ;
           / * If key is the F6 key,act on it * /
           else if(wParam= = (WORD)VK_F6) {
                  / * Leave if the F6 key was a key release and not press * /
                  if (lParam * KEY_WAS_UP) break;
                  / * Make sure Alt key is in desired state, else leave * /
                  if((useAltKey) && ! (lParam & ALT_KEY_DOWN) ) {
                       break ;
                  else if((!useAltKey) && (lParam & ALT KEY_DOWN)){
                       break ;
                  / * Make sure Shift key in desired state, else leave * /
                  if(useShiftKey && ! shiftKeyDown){
                       break ;
                  else if ( !useShiftKey && shiftKeyDown) {
                       break ;
                  / * Make sure Ctrl key in desired state, else leave * /
                  if(useCtrlKey && ! ctrlKeyDown){
                       break ;
                  else if ( !useCtrlKey && ctrlKeyDown) {
                      break ;
              }
                 / * Eat the keystroke, and don't call DefProc * /
                 dwResult = EAT_THE_KEY;
                 fCallDefProc =FALSE ;
                 / * We made it, so Ctrl+Alt+F6 was pressed! * /
                 MessageBox (NULL, (LPSTR)" You pressed Ctrl + Alt + F6!" , (LPSTR)" Keyboard
                                              Hook" ,MB_OK) ;
                 break ;
              }
        default :
                 fCallDefProc = TRUE ;
                 break ;
    }
if((nCode<0) | (fCallDefProc && (nextKeyboardFilter ! =NULL)))
     dwResult = DefHookProc (nCode, wParam, lParam,&nextKeyboardFilter) ;
     return (dwResult) ;
}
/ * This function is called by the application to set up or tear
     down the filter function hooks.  * /
void FAR PASCAL
SetupFilters (BOOL install)
{
     if (install) {
           next KeyboardFilter = SetWindowsHook (WH-KEYBOARD,
                                                            (FARPROC) KeyBoardProc) ;
    }
     else {
           UnhookWindowsHook (WH-KEYBOARD, (FARPROC)KeyBoardProe) ;
           nextKeyboardFitter = NULL ;
    }
}
    Microsoft強調最好把過濾函數放在DLL中而不是放在應用程序中(注意在DLL中有LibMain()而沒有WinMain()),為了實現上述應用,你需要編寫一個普通的Windows應用程序來調用SetupFilters()函數——當該函數的參數值為TRUE時,該程序就開始監視鍵盤輸入;當該函數的參數值為FALSE時,該程序就停止監視鍵盤輸入。如果該程序被激活并且調用了SetupFilters(TRUE),回調函數KeyBoardProc()就會接收所有的鍵盤輸入,而不管你是否正在運行其它的Windows程序。如果你按下Ctrl+Altq+F6,屏幕上就會出現一個小的消息框,通知你這些鍵被你按下了。在按下這些鍵的那一剎那,正在運行的那個程序被中斷了。
  注意,在DOS Shell下,鍵盤過濾函數不會接收鍵盤輸入,但是在出現象詢問你是否真的要退出Windows這樣的系統模式對話框時,它會接收鍵盤輸入并且中斷該對話框。

    請參見:
    20.12怎樣把數據從一個程序傳遞到另一個程序?
    20.17可以使熱啟動(Ctrl+Alt+Delete)失效嗎?
    21.10什么是動態連接?

    20.9 為什么要使用靜態變量
    靜態變量作為一個局部變量是很合適的,它在函數退出后不會失去其本身的值。例如,有一個要被調用很多次的函數,它的一部分功能就是計算自己被調用的次數。你不能用一個簡單的局部變量來實現這部分功能,因為每次進入該函數時,這個變量都沒有被初始化。如果把這個計數變量說明為靜態的,那么它就會象一個全局變量那樣保留自己的當前值。
    那么為什么不直接使用一個全局變量呢?你可以使用一個全局變量,而且這樣做沒有錯誤。問題是使用了大量全局變量的程序維護起來很麻煩,尤其是有許多函數都各自訪問一個全局變量的程序。再說一遍,這樣做沒有錯誤,這只是一個程序設計和可讀性是否好的問題。如果你把這樣的變量說明為靜態的,你就可以提醒自己(或者其它可能讀你的程序的人)它是局部變量,但要象全局變量那樣被處理(保留自己的值)。如果你把它說明為全局的,那么讀這個程序的人一定會認為有很多地方要引用它,盡管實際上并不是這樣。
    總而言之,當你需要一個能保持自己的值的局部變量時,使用靜態變量是一種好的編程習慣。
    請參見:
    2.17可以頭文件中說明static變量嗎?

    20.10 怎樣在一個程序后面運行另一個程序?
    顯然,在一個程序后面運行另一個程序的最簡單的辦法是把它們依次列入一個批處理文件中,在執行該批處理文件時,其中所列的程序就會依次運行。然而,這是一種人們已經知道的辦法。
    在c或DOS中,都沒有一種特定的方法來完成“在一個程序結束后運行另一個程序”這樣一種函數調用。然而,c提供了兩組函數,它們允許一個程序隨時可以運行另一個程序,而后者的運行將結束前者的運行。如果你將這樣的一個函數調用放到第一個程序的末尾,你就能達到上述目的。C所提供的這兩組函數實際上是由exec()和spawn()所代表的兩個函數族,其中的每一個函數都具有一種區別于同族其它函數的功能。exec()函數族包括這樣一些成員:execl(),execle(),execlp(),execlpe(),execv(),execve(),execvp()和execvpe()。下面列出了這此函數名中的e,l,p和v等后綴的含義:
    e    明確地把一個指向環境參數的指針數組傳遞給子進程
    l    把命令參數逐個傳遞給要執行的程序
    p    通過環境變量PATH找到要執行的文件
    v    把命令行參數以一個指針數組的形式傳遞給要執行的程序
    在程序中選用哪一個函數完全取決于你以及要執行的程序的需要。下例中的程序調用了其參數由命令行指定的另一個程序:
# include <stdio. h>
# include <process. h>
char * envString[] = {                 / * environment for the app * /
      "COMM VECTOR=0x63",      /* communications vector */
      "PARENT=LAUNCH. EXE",   / * name of this app * /
      "EXEC=EDIT. COM",           / * name of app to exec * /
      NULL} ;                          / * must be NULL-terminated * /
void
main(int argc, char **argv)
{
      / * Call the one with variable argumets and an enviroffment * /
      _execvpe (" EDIT. COM", argv, envString ) ;
      printf("If you can read this sentence, the exec didn't happen!\n") ;
}
   上面這個短小的例子調用_execvpe()來執行DOS的文件編輯器EDIT.COM,EDIT程序的參數來自該例的命令行。在調用execvpe()函數后,上例中的程序就結束了;當EDIT程序退出時,你將返回到DOS提示符。如果printf()語句的打印內容顯示在屏幕上,則說明_execvpe()函數調用出了問題,因為如果它調用成功,就不會有上述結果。注意,上例所提供的EDIT.COM的環境變量是沒有任何意義的,然而,如果上例要執行一個需要環境變量的程序,那么所提供的環境變量就能供該程序使用了。
    用spawn()函數同樣可以完成上例所做的工作。spawn()函數族包括這樣一些成員:
    spawnl(),spawnle()。spawnlp(),spawnlpe(),spawnv(),spawnve(),spawnvp()和spawnvpe()。這些函數名中的e,l,p和v等后綴的含義與exec()族函數名中的相同。實際上,spawn()函數族與exec()函數族基本相同,只不過有一點小小的差別——spawn()函數既可以在結束原來的程序后啟動另一個程序,也可以啟動另一個程序并在該程序結束后返回到原來的程序。spawn()函數的參數與exec()函數的基本相同,只不過需要增加一個參數一你必須用_P_OVERLAY(結束原來的程序)或_P_WAIT(結束后返回到原來的程序)作為spawn()函數的第一個參數。下例用spawn()函數完成了與前面的例子相同的工作:
# include <stdio. h>
# include <process. h>
char * envString[] = {                 / * environment for the app * /
      "COMM VECTOR = 0x63",     / * communications vector * /
      "PARENT=LAUNCH. EXE",   / * name of this app * /
      "EXEC=EDIT. COM" ,           / * name of app to exec * /
      NULL} ;                          / * must be NULL-terminated * /
void
main(int argc, char **argv)
{
      / * Call the one with variable argumets and an environment * /
     _spawnvpe (_P_OVERLAY, "EDIT. COM", argv, envString) ;
     printf("If you can read this sentence, the exec didn't happen!\n" );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产片一区二区三区| 亚洲欧洲在线观看av| 国产成a人亚洲精| 亚洲午夜激情av| 2023国产精品自拍| 在线看日韩精品电影| 国产精品一级在线| 五月婷婷欧美视频| 亚洲欧美综合在线精品| 久久亚洲捆绑美女| 91精品国模一区二区三区| 99国产精品久久久久久久久久久 | 欧美一卡二卡三卡| 51精品视频一区二区三区| 看片网站欧美日韩| 日本乱人伦一区| 免费在线观看不卡| 亚洲国产一区二区a毛片| 亚洲国产高清在线| 91精品福利在线一区二区三区| 国产精品久久看| 99国产精品国产精品毛片| 国产综合成人久久大片91| 日韩精品亚洲一区二区三区免费| 欧美人与z0zoxxxx视频| aaa国产一区| 国产91精品入口| 狠狠色丁香九九婷婷综合五月 | 国产亚洲精品久| 日韩天堂在线观看| 欧美日韩一区二区不卡| 色老头久久综合| 91蝌蚪porny| 99久久亚洲一区二区三区青草| 亚洲欧美一区二区三区久本道91 | 日韩欧美国产一区二区在线播放| 经典一区二区三区| 日韩福利电影在线观看| 亚洲国产成人91porn| 亚洲综合小说图片| 亚洲一二三四久久| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美日韩国产综合久久| 91视频观看免费| 91蜜桃视频在线| 91免费国产视频网站| 色综合网色综合| 91国产免费看| 欧美自拍偷拍一区| 欧美亚洲综合网| 蜜桃一区二区三区在线观看| 亚洲精品中文在线影院| 一区二区三区视频在线观看| 亚洲女人小视频在线观看| 亚洲摸摸操操av| 亚洲一二三区在线观看| 三级精品在线观看| 久久精品国产亚洲高清剧情介绍| 中文字幕日韩一区二区| 亚洲人成在线观看一区二区| 亚洲欧美影音先锋| 亚洲精品视频自拍| 亚洲国产一区二区三区 | 欧美日韩大陆在线| 日韩欧美中文字幕制服| 久久久久国产精品麻豆ai换脸| 91黄视频在线观看| 欧美性受xxxx黑人xyx性爽| 88在线观看91蜜桃国自产| 精品乱人伦小说| 国产精品网站导航| 亚洲一区二区视频在线| 日本网站在线观看一区二区三区| 亚洲欧洲av色图| 丝袜亚洲精品中文字幕一区| 卡一卡二国产精品| av电影天堂一区二区在线| 91福利精品第一导航| 欧美一区二区在线播放| 中文字幕欧美国产| 亚洲黄色片在线观看| 免费成人在线观看| 99re热视频精品| 91精品国产色综合久久ai换脸| 欧美专区在线观看一区| 欧美大片一区二区| 亚洲精品视频在线观看免费| 午夜精品影院在线观看| 国产成人av福利| 精品视频一区二区不卡| 久久美女艺术照精彩视频福利播放 | 欧美一区二区三区四区五区| 国产日韩欧美一区二区三区乱码| 精品国产免费久久| 亚洲欧洲中文日韩久久av乱码| 国产女同互慰高潮91漫画| 亚洲一区视频在线| 国产**成人网毛片九色 | 在线观看成人小视频| 337p粉嫩大胆噜噜噜噜噜91av | 国产乱码精品1区2区3区| 91婷婷韩国欧美一区二区| 国产精品久线在线观看| 老司机免费视频一区二区三区| 午夜亚洲福利老司机| 国产成人精品一区二| 制服丝袜亚洲播放| 亚洲男人都懂的| 国产一级精品在线| 69av一区二区三区| 自拍视频在线观看一区二区| 韩国精品主播一区二区在线观看| 国产一区二区调教| 在线电影一区二区三区| 亚洲乱码国产乱码精品精可以看| 亚洲天堂中文字幕| 高清视频一区二区| 久久这里都是精品| 日韩av中文字幕一区二区三区| 免费成人小视频| 欧美午夜免费电影| 亚洲免费在线视频| 成人av电影免费在线播放| 久久女同精品一区二区| 美女视频第一区二区三区免费观看网站 | www.性欧美| 国产精品素人视频| 国产精品66部| 久久一区二区视频| 麻豆国产欧美日韩综合精品二区 | 麻豆精品久久精品色综合| 在线免费观看成人短视频| 自拍偷拍国产亚洲| 99久久久免费精品国产一区二区| 欧美日韩电影一区| 亚洲成人久久影院| 在线观看av一区| 亚洲精品国产第一综合99久久 | 午夜视频一区在线观看| 欧美中文字幕一区二区三区| 亚洲欧美日韩久久| 色哟哟国产精品免费观看| 亚洲少妇屁股交4| av不卡在线观看| 亚洲女爱视频在线| 色综合久久久久综合体| 亚洲综合色噜噜狠狠| 欧美三级乱人伦电影| 亚洲午夜激情网页| 欧美一区二区三区视频| 麻豆精品视频在线观看| 久久免费视频一区| 成人av网站免费| 亚洲人精品午夜| 欧美日韩精品专区| 日韩精品色哟哟| 26uuu久久天堂性欧美| 国产一区二区在线观看免费 | 欧美精品一区二区三区视频| 精品一区二区三区免费| 国产蜜臀97一区二区三区| 成人av综合在线| 一区二区三区电影在线播| 91高清在线观看| 日韩—二三区免费观看av| 欧美tickling挠脚心丨vk| 国产高清不卡二三区| 亚洲天堂久久久久久久| 在线电影国产精品| 福利一区福利二区| 一区二区三区久久久| 91精品国产一区二区三区蜜臀| 亚洲精品视频在线观看网站| 欧美日韩一区二区不卡| 精品一区二区在线免费观看| 国产精品久久看| 欧美私人免费视频| 国产一区999| 亚洲午夜视频在线观看| 欧美精品一区二区在线观看| 色综合亚洲欧洲| 激情综合网最新| 亚洲激情六月丁香| 久久这里只有精品视频网| 99久久伊人网影院| 日本午夜精品视频在线观看| 国产精品午夜久久| 6080亚洲精品一区二区| 不卡的电影网站| 美女在线视频一区| 国产精品污污网站在线观看| 7777精品伊人久久久大香线蕉的 | 欧美性猛片aaaaaaa做受| 日本中文字幕一区二区视频| 中文字幕乱码久久午夜不卡 | 中文成人综合网| 日韩一区二区三区四区五区六区| 亚洲18女电影在线观看| 久久综合国产精品| 5月丁香婷婷综合|