2012-04-02 100 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; 
} 
相关问题