{"id":59,"date":"2006-08-22T20:58:57","date_gmt":"2006-08-23T01:58:57","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=59"},"modified":"2006-08-22T20:59:21","modified_gmt":"2006-08-23T01:59:21","slug":"llamadas-al-sistema-de-windows-desde-c","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=59","title":{"rendered":"Llamadas al sistema de Windows desde C#"},"content":{"rendered":"<p>Como escribir un programa C# que hace llamadas al Sistema de Windows y sus apis<\/p>\n<p>Para este ejemplo he decido usar el API GetTickCount() que devuelve un valor entero y no lleva datos entrada.<\/p>\n<p>Su prototipo es:<\/p>\n<p>Int GetTickCount(void) y se encuentra almacenada en Kernel32.dll, Esta api nos regresa un entero con los milisegundo que ha estado encendida nuestra PC.<\/p>\n<p>La importaci\u00f3n de la api se hace en una sola l\u00ednea, el resto de c\u00f3digo es simple programaci\u00f3n objetos.<\/p>\n<p>Declararemos una Clase, crearemos sus m\u00e9todos para explotar el api, hacemos una instancia de la clase (un objeto) y lo usamos para acceder a los m\u00e9todos y solo como practica usamos el constructor y destructor para advertir que el objeto ha iniciado y cuando ha sido destruido.<\/p>\n<p>Para incluir el API requerimos saber en que DLL esta y luego importar su prototipo, requerimos declarar en el using System.Runtime.InteropServices;<\/p>\n<p>Y lo importamos de esta manera.<\/p>\n<p>[DllImport (&#8220;Kernel32.dll&#8221;)] public static extern int GetTickCount();<\/p>\n<p>Y con eso hemos incluido el api como un m\u00e9todo est\u00e1tico de nuestra clase y esta listo para usarse.<\/p>\n<p>[DllImport (\u201carchivo.dll??)] sirve para indicar en donde se encuentra el api que usaremos<\/p>\n<p>Extern sirve para indicar a C# que el c\u00f3digo del m\u00e9todo esta externo a la clase, de hecho en kernel32.dll<\/p>\n<p>La importaci\u00f3n de c\u00f3digo es \u00fatil para explotar recursos en el sistema operativo, sin embargo al hacer uso de este tipo de recursos hemos amarrado el programa a la plataforma que provee el recurso, as\u00ed que nuestro programa ha perdido portabilidad pero ha ganado capacidades en el entorno Windows de Microsoft.<\/p>\n<p>El c\u00f3digo es el siguiente:<\/p>\n<p>using System;<br \/>\nusing System.Runtime.InteropServices;<\/p>\n<p>namespace CSCallback<br \/>\n{<br \/>\n\tclass MainClass<br \/>\n\t{<br \/>\n\t\t[DllImport (&#8220;Kernel32.dll&#8221;)] public static extern int GetTickCount();<\/p>\n<p>\t\tpublic MainClass ()<br \/>\n\t\t{<br \/>\n\t\t\tConsole.WriteLine (&#8220;\\nObjeto de la clase (&#8221; + this.ToString () + &#8220;) Construido.&#8221;);<br \/>\n\t\t\tConsole.WriteLine (&#8220;\\nEste programa accesa al Kernel.Dll y usa la API GetTickCount\\n\\nTiempo con la computadora en linea:\\n&#8221;);<br \/>\n\t\t}<\/p>\n<p>\t\tpublic int segundos ()<br \/>\n\t\t{<br \/>\n\t\t\treturn GetTickCount() \/ 1000;<br \/>\n\t\t}<\/p>\n<p>\t\tpublic int minutos ()<br \/>\n\t\t{<br \/>\n\t\t\treturn GetTickCount() \/ 60000;<br \/>\n\t\t}<\/p>\n<p>\t\tpublic int horas()<br \/>\n\t\t{<br \/>\n\t\t\treturn (GetTickCount() \/ 60000) \/ 60;<br \/>\n\t\t}<\/p>\n<p>\t\tpublic int dias()<br \/>\n\t\t{<br \/>\n\t\t\treturn (GetTickCount() \/ 60000) \/ 60 \/24;<br \/>\n\t\t}<\/p>\n<p>\t\t~MainClass()<br \/>\n\t\t{<br \/>\n\t\t\tConsole.WriteLine (&#8220;\\nObjeto Destruido\\n&#8221;);<br \/>\n\t\t}<\/p>\n<p>\t\tpublic static void Main(string[] args)<br \/>\n\t\t{<br \/>\n\t\t\tMainClass cpuenlinea = new MainClass ();<\/p>\n<p>\t\t\tConsole.WriteLine (&#8220;Segundos: {0}\\nMinutos: {1}\\nHoras: {2}\\nDias: {3}\\n&#8221;,cpuenlinea.segundos() ,cpuenlinea.minutos(),cpuenlinea.horas(),cpuenlinea.dias());<\/p>\n<p>\t\t\tConsole.WriteLine (&#8220;Preciona Enter para terminar&#8221;);<br \/>\n\t\t\tConsole.ReadLine ();<\/p>\n<p>\t\t}<br \/>\n\t}<br \/>\n}<\/p>\n<p>Reescrib\u00ed el mismo programa usando Windows.Form por si alguno lo desea usar como un programa de colecci\u00f3n o \u201cCosas curiosas??, el programa incluye en si mismo su c\u00f3digo en C#<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/gettickcount\/gettick.jpg\" alt=\"Version Windows.Form del programa\" \/><\/p>\n<p>Descargar los programas compilados y su codigo fuente &#8211; > <a href=\"https:\/\/www.lastdragon.net\/misarchivos\/gettickcount\/gettick.zip\">AQUI<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como escribir un programa C# que hace llamadas al Sistema de Windows y sus apis Para este ejemplo he decido usar el API GetTickCount() que devuelve un valor entero y no lleva datos entrada. Su prototipo es: Int GetTickCount(void) y se encuentra almacenada en Kernel32.dll, Esta api nos regresa un entero con los milisegundo que&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-59","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=59"}],"version-history":[{"count":0,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/59\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}