• Sábado 14 de Diciembre de 2024, 19:43

Autor Tema:  usar api windows con visual c++ 2008 .net  (Leído 3650 veces)

killerghosts

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
usar api windows con visual c++ 2008 .net
« en: Martes 22 de Diciembre de 2009, 00:31 »
0
Pues eso queria saber si se podia utilizar las funciones api de windows con visual c++ .net  2008 gracias, inclui la libreria windows.h pero al ir a utilizar alguna funcion como shellexecuteex me daba error ya se que se puede utilizar un objeto llamado process pero yo quiero utilizar las funciones api gracias.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #1 en: Martes 22 de Diciembre de 2009, 09:52 »
0
Claro que puedes, pero como somos adivinos y tenemos la bola de cristal recién recargada puedo decirte que lo más seguro es que se te haya olvidado de incluir el fichero shellapi.h y la biblioteca de importación shell32.lib...

Eso o nos pones el error que te da y vemos qué está pasando...
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

killerghosts

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #2 en: Martes 22 de Diciembre de 2009, 19:34 »
0
primero gracias por tu contestacion, hice lo que me dijiste inclui las librerias siguientes:
#include <shell32.lib>
#include <windows.h>
#include <shellapi.h>


y el error que me da ahora al compilar es el siguiente:

fatal error C1083: No se puede abrir el archivo incluir: 'shell32.lib': No such file or directory

bueno y cuando soluciones esto, realmente podre utilizar funciones de la api de windows, y funciones .net ?? conjuntamente, por cierto ya se que soy un pesao, me gustaria acceder al hardware, del ordenador puerto paralelo, etc memoria eso se puede hacer, c++ y desde msdos era muy facil incluso utilizaba codigo ensamblador sin problemas en visual c++ 2008 se podria joder no me queda respiracion es broma muchas gracias

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #3 en: Martes 22 de Diciembre de 2009, 20:06 »
0
Cita de: "killerghosts"
primero gracias por tu contestacion, hice lo que me dijiste inclui las librerias siguientes:
#include <shell32.lib>
#include <windows.h>
#include <shellapi.h>


y el error que me da ahora al compilar es el siguiente:

fatal error C1083: No se puede abrir el archivo incluir: 'shell32.lib': No such file or directory

bueno y cuando soluciones esto, realmente podre utilizar funciones de la api de windows, y funciones .net ?? conjuntamente, por cierto ya se que soy un pesao, me gustaria acceder al hardware, del ordenador puerto paralelo, etc memoria eso se puede hacer, c++ y desde msdos era muy facil incluso utilizaba codigo ensamblador sin problemas en visual c++ 2008 se podria joder no me queda respiracion es broma muchas gracias

Madremía, qué chorro preguntas sin puntuación y sin nada...

Te falta la ruta a shell32.lib. Supongo que ese fichero lo habrás puesto en las opciones del enlazador, no en un include.

A) Puedes usar funciones .NET y nativas si activas la opción /CLR del compilador (o creas un proyecto del tipo CLR).
B) No puedes acceder al hardware desde Win32, no sin un driver específico.
C) El acceso al puerto paralelo se hace con "CreateFile" pasando el nombre del puerto en lugar de un fichero.
D) A memoria no puedes acceder, ni siquiera directamente a una dirección virtual del espacio de direcciones de tu aplicación, menos aún al físico real.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

killerghosts

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #4 en: Jueves 24 de Diciembre de 2009, 10:58 »
0
Bien te digo lo que he hecho y los errores que me salen simplemente he dibujado un formulario normal con un boton y quiero que cuando le de al boton ejecute un programa, en este caso el cmd.exe


he incluido estas librerias


#include <windows.h>
#include <shellapi.h>


he puesto /clr en las opciones de enlazado y he configurado los directorios donde tiene que encontrar librerias y bibliotecas el codigo que he puesto que ejecute en el evento del boton es el siguiente





LPSHELLEXECUTEINFO puntero; // declarar el puntero
puntero=new SHELLEXECUTEINFO; // CREAR LA INSTANCIA
strcpy((char *)puntero->lpVerb,"open"); // darle valor al parametro de como tiene que actuaar
strcpy((char *)puntero->lpFile,"cmd.exe"); // dar el nombre del programa
ShellExecuteEx(puntero); // ejecutar programa

y los errores que da al intentar compilar son los siguientes:




projectsprueba_apiprueba_apiForm1.h(83) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        C:Archivos de programaMicrosoft Visual Studio 9.0VCincludestring.h(74) : vea la declaración de 'strcpy'
1>c:documents and settingsmanuel santanamis documentosvisual studio 2008projectsprueba_apiprueba_apiForm1.h(84) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>  C:Archivos de programaMicrosoft Visual Studio 9.0VCincludestring.h(74) : vea la declaración de 'strcpy'
1>Vinculando...
1>prueba_api.obj : error LNK2028: se hace referencia al símbolo (token) sin resolver (0A00000F) "extern "C" int __stdcall ShellExecuteExW(struct _SHELLEXECUTEINFOW *)" (?shellExecuteExW@@$$J14YGHPAU_SHELLEXECUTEINFOW@@@Z) en la función "private: void __clrcall prueba_api::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@prueba_api@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>prueba_api.obj : error LNK2019: símbolo externo "extern "C" int __stdcall ShellExecuteExW(struct _SHELLEXECUTEINFOW *)" (?ShellExecuteExW@@$$J14YGHPAU_SHELLEXECUTEINFOW@@@Z) sin resolver al que se hace referencia en la función "private: void __clrcall prueba_api::Form1::Form1_Load(class System::Object ^,class System::EventArgs ^)" (?Form1_Load@Form1@prueba_api@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
1>C:Documents and SettingsManuel SantanaMis documentosVisual Studio 2008Projectsprueba_apiDebugprueba_api.exe : fatal error LNK1120: 2 externos sin resolver
1>El registro de compilación se guardó en el "file://c:Documents and SettingsManuel SantanaMis documentosVisual Studio 2008Projectsprueba_apiprueba_apiDebugBuildLog.htm"
1>prueba_api - 3 errores, 2 advertencias
========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========


bueno eso es lo que me pasa oye y gracias por responderme y tener paciencia gracias otra vez

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #5 en: Jueves 24 de Diciembre de 2009, 13:23 »
0
Muchos errores estás cometiendo, muchos.

El primero es que estás usando cadenas ANSI cuando tienen que ser UNICODE (lee aquí un hilo no muy lejano en el que hablo del tema).

El segundo es que estás sobreescribiendo memoria. Esos strcpy no valen: tienes que crearte tu cadena y apuntar a ella con el puntero de la estructura.

El tercero, te falta añadir sellapi.lib en las opciones del enlazador.

El cuarto, no necesitas declarar un puntero a la estructura, anque como lo haces vale, pero no te olvides luego de liberarla con delete.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

killerghosts

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #6 en: Lunes 28 de Diciembre de 2009, 00:37 »
0
muchas gracias por tu ayuda ya lo consegui hice lo que me dijiste y el codigo con el que lo consegui es el siguiente

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
          {  
             
            WCHAR modo[]=L"open";
            WCHAR fichero[]=L"notepad.exe";
            ShellExecute(hand,modo,fichero,NULL,NULL,SW_SHOWNORMAL);
            
               }

hand es una variable global tipo HWND, ahora y como no me conformo he puesto otro boton y lo que quiero es cerrar ese proceso que he abierto, y he decidido utilizar la funcion del api sendmessage pero ahora me da otro error me da el siguiente error,

>c:documents and settingsmsa1mis documentosvisual studio 2008projectsshellexecshellexecForm1.h(128) : error C2661: 'System::Windows::Forms::Control::SendMessage' : ninguna función sobrecargada acepta 4 argumentos



lo que me llama la atencion es que yo se que la funcion del api acepta 4 parametros pero el compilador me hace referencia a la funcion sendmessage de

"System::Windows::Forms::Control::SendMessage" las librerias donde se hace referencia a esta funcion son winuser.h y la biblicoteca user32.lib he añadido en el enlazador dicha referencia a esa biblioteca y puesto un include con winuser.h pero me da ese error, si me pudieras hechar una mano te lo agradeceria gracias

killerghosts

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: usar api windows con visual c++ 2008 .net
« Respuesta #7 en: Miércoles 30 de Diciembre de 2009, 00:32 »
0
ya lo solucione en vez de utilizar la funcion sendmessage utilice sendmessageW y ya ta gracias por tu ayuda