2012-04-02 92 views
4

我正在尋找在我正在使用的項目中使用Win32 API。但是我不知道如何從我的cygwin項目中調用Win32 API。有人能指出我正確的方向嗎?如何從Cygwin程序調用Win32 API

+0

你能具體談談你想要做什麼? – 2012-04-02 18:16:22

+0

當然;這是參考另一個問題,我問:[如何從設備讀取字節](http://stackoverflow.com/questions/9946795/how-to-read-bytes-from-a-device-using-cc- in-windows#comment12708876_9946795) – redhotspike 2012-04-02 18:19:55

回答

6

通過包含「windows.h」頭文件,可以從cygwin程序訪問Win32 API。這意味着你已經安裝了win32軟件包。下面是一個例子的程序:

#include <iostream> 
#include <string> 
#include <windows.h> 

int main(int argc, char *argv[]) 
{ 
    std::string val; 

    if (argc > 1) 
    { 
     val = argv[1]; 
    } 

    std::cout << "You typed: " << val << std::endl; 
    ::MessageBox(NULL, val.c_str(), "You Typed:", MB_OK); 

    return 0; 
} 

這可以編譯和「使文件名」,其中filename.cpp含有上述源連接。然後通過在bash提示符處鍵入./filename xxxx來執行。然後xxxx將出現在消息框窗口中。

+1

有趣...我會試試這個。從這個例子的外觀來看,它是否會創建一個彈出窗口? *思考*如果是的話,這可能確實是一件美妙的事情! – redhotspike 2012-04-02 18:41:37

+1

是的,它會創建一個彈出窗口。只要確保你安裝了win32開發包。我通常會對Cygwin進行全面安裝,因此我無法告訴您哪些特定的代碼可以脫手。 – 2012-04-02 18:51:09

+1

我覺得我剛剛找到了100美元的賬單......認真:這正是我所期待的! – redhotspike 2012-04-02 18:52:13

1

你可以看看Cygwin FAQ(特別是6.9如何使用Win32 API調用?)

當然,你將需要得到WIN32API頭保持 - 你最好的選擇是下載/安裝fre C++編譯器(例如MinGW)並引用它的頭文件。

+0

好東西!謝謝。如需進一步參考,我發現[在Cygwin應用程序中使用Win32文件API](http://cygwin.com/cygwin-ug-net/using.html#pathnames-win32-api)應該有人需要它。 – redhotspike 2012-04-02 18:49:39

0

如果您瞭解Perl,您可能需要使用win32 :: GUI模塊來創建窗口和對話框。確保perl5包含在你的cygwin安裝中。

運行CPAN從cygwin命令行來獲取CPAN解釋然後做一個得到的Win32 :: GUI

**To Get Familiar with win32::GUI** 
=========================================== 
win32-gui-demos.pl for a tutorial 
man 1 win32-gui-demos.pl for an overview -or- 
perldoc win32-gui-demos.pl for an overview 
perldoc win32::GUI for an intro 

如果教程不從其菜單運行,只需將它們複製並粘貼到vi文件中,並在保存時使它們可執行。

如:(簡單的對話,以增強)

#!perl -w 
use strict; 
use warnings; 

use Win32::GUI(); 

my $main = Win32::GUI::DialogBox->new(
    -name => 'Main', 
    -text => 'Continue with Outlook Backup?', 
    -width => 200, 
     -height => 200 
); 

$main->AddButton(
    -name => 'Default', 
    -text => 'Ok', 
    -default => 1, # Give button darker border 
    -ok  => 1, # press 'Return' to click this button 
    -width => 60, 
    -height => 20, 
    -left => $main->ScaleWidth() - 140, 
    -top  => $main->ScaleHeight() - 30, 
); 

$main->AddButton(
    -name => 'Cancel', 
    -text => 'Cancel', 
    -cancel => 1, # press 'Esc' to click this button 
    -width => 60, 
    -height => 20, 
    -left => $main->ScaleWidth() - 70, 
    -top => $main->ScaleHeight() - 30, 
); 

$main->Show(); 
Win32::GUI::Dialog(); 
exit(0); 

sub Main_Terminate { 
    return -1; 
} 

sub Default_Click { 
    print "OK to Proceed Selected\n"; 
    return 0; 
} 

sub Cancel_Click { 
     print "Cancel Backup Selected\n"; 
     return 1; 
} 
相關問題