SoloCodigo
Programación General => C/C++ => Visual C++ => Mensaje iniciado por: killerghosts en Martes 22 de Diciembre de 2009, 00:31
-
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.
-
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...
-
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
-
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.
-
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
-
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.
-
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
-
ya lo solucione en vez de utilizar la funcion sendmessage utilice sendmessageW y ya ta gracias por tu ayuda