如何从Cygwin程序中调用Win32 API

时间:2012-04-02 18:09:32

标签: winapi cygwin

我希望在我正在开发的项目中使用Win32 API。但是我不知道如何从我的cygwin项目中调用Win32 API。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:7)

可以通过包含“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;
}

这可以编译并与“make filename”链接,其中filename.cpp包含上述源。然后在bash提示符下键入./filename xxxx来执行。然后xxxx将出现在消息框窗口中。

答案 1 :(得分:2)

您可以查看Cygwin FAQ(特别是6.9如何使用Win32 API调用?)

当然,您需要获取WIN32API标头 - 您最好的选择是下载/安装fre c ++编译器(例如MinGW)并参考其标题。

答案 2 :(得分:1)

如果您了解Perl,则可能需要使用win32 :: GUI模块来创建窗口和对话框。确保perl5包含在你的cygwin安装中。

从cygwin命令行运行 cpan 以获取cpan解释器,然后执行 get 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;
}