2012-04-02 5 views
4

Ich bin auf der Suche nach der Win32-API in einem Projekt, an dem ich arbeite. Ich habe jedoch keine Ahnung, wie ich die Win32-API von meinem Cygwin-Projekt aus aufrufen soll. Kann mir jemand in die richtige Richtung zeigen?Wie rufe ich die Win32-API von einem Cygwin-Programm

+0

Können Sie das konkretisieren, was Sie zu tun versuchen? –

+0

Sicher; Dies bezieht sich auf eine andere Frage, die ich gestellt habe: [Wie man Bytes von einem Gerät liest] (http://stackoverflow.com/questions/9946795/how-to-read-bytes-from-a-device-using-cc- in-windows # comment12708876_9946795) – redhotspike

Antwort

6

Auf die Win32-API kann von einem Cygwin-Programm aus zugegriffen werden, indem die Headerdatei "windows.h" eingeschlossen wird. Es bedeutet natürlich, dass Sie die win32-Pakete installiert haben. Hier ist ein Beispiel-Programm:

#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; 
} 

Dies kann mit „make Dateiname“ kompiliert und verknüpft werden, in denen filename.cpp die obige Quelle enthält. Führen Sie dann aus, indem Sie an der Bash-Eingabeaufforderung ./filename xxxx eingeben. Dann erscheint xxxx in einem Nachrichtenfenster.

+1

Interessant ... Ich werde das versuchen. Wie sieht das Aussehen dieses Beispiels aus, erzeugt es ein Popup-Fenster? * grübelt * Wenn ja, ist das vielleicht eine wunderbare Sache! – redhotspike

+1

Ja, es erstellt ein Popup-Fenster. Stellen Sie sicher, dass Sie die win32-Entwicklungspakete installiert haben. Ich mache normalerweise eine vollständige Installation von Cygwin, so dass ich Ihnen nicht sagen kann, welche spezifischen aus der Hand. –

+1

Ich habe das Gefühl, gerade eine 100-Dollar-Rechnung gefunden zu haben ... im Ernst: genau das habe ich gesucht! – redhotspike

1

Sie am Cygwin FAQ aussehen könnte (speziell 6.9 Wie verwende ich Win32-API-Aufrufe?)

Natürlich benötigen Sie einen Halt der WIN32API Header zu bekommen - die beste Option zum Download ist/install ein Fre C++ Compiler (zB MinGW) und beziehen sich auf seine Header.

+0

Gute Sachen! Vielen Dank. Als weitere Referenz fand ich [Verwenden der Win32-Datei-API in Cygwin-Anwendungen] (http://cygwin.com/cygwin-ug-net/using.html#pathnames-win32-api) sollte jemand es brauchen. – redhotspike

0

Wenn Sie Perl kennen, können Sie mit dem win32 :: GUI-Modul Fenster und Dialoge erstellen. Stellen Sie sicher, dass Perl5 in Ihrer Cygwin-Installation enthalten war.

Run cpan von der Cygwin-Kommandozeile die cpan Dolmetscher erhalten dann eine win32 :: GUI erhalten.

**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 

Wenn die Tutorials von seinen Menüs laufen nicht, kopieren Sie einfach und fügen Sie sie in eine vi-Datei und machen ausführbare sie, wenn gespeichert.

zB: (einfachen Dialog zu verbessern)

#!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; 
} 
Verwandte Themen