using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Threading; namespace SimpleParallelPortAccess { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("inpout32.dll", EntryPoint = "Out32")] static extern void Output(int adress, int value); [DllImport("inpout32.dll", EntryPoint = "Inp32")] static extern int Input(int adress); void SendCommand(int value) { Output(0x378, value); Output(0x37A, 0x1); Output(0x37A, 0x0); for (int i = 0; i < 200000; i++) { } //Thread.Sleep(1); } void PrintChar(char value) { switch (value) { case ' ': SendCommand(0x20); break; case '!': SendCommand(0x21); break; case '\"': SendCommand(0x22); break; case '#': SendCommand(0x23); break; case '$': SendCommand(0x24); break; case '%': SendCommand(0x25); break; case '&': SendCommand(0x26); break; case '\'': SendCommand(0x27); break; case '(': SendCommand(0x28); break; case ')': SendCommand(0x29); break; case '*': SendCommand(0x2A); break; case '+': SendCommand(0x2B); break; case ',': SendCommand(0x2C); break; case '-': SendCommand(0x2D); break; case '.': SendCommand(0x2E); break; case '/': SendCommand(0x2F); break; case '0': SendCommand(0x30); break; case '1': SendCommand(0x31); break; case '2': SendCommand(0x32); break; case '3': SendCommand(0x33); break; case '4': SendCommand(0x34); break; case '5': SendCommand(0x35); break; case '6': SendCommand(0x36); break; case '7': SendCommand(0x37); break; case '8': SendCommand(0x38); break; case '9': SendCommand(0x39); break; case ':': SendCommand(0x3A); break; case ';': SendCommand(0x3B); break; case '<': SendCommand(0x3C); break; case '=': SendCommand(0x3D); break; case '>': SendCommand(0x3E); break; case '?': SendCommand(0x3F); break; case '@': SendCommand(0x40); break; case 'A': SendCommand(0x41); break; case 'B': SendCommand(0x42); break; case 'C': SendCommand(0x43); break; case 'D': SendCommand(0x44); break; case 'E': SendCommand(0x45); break; case 'F': SendCommand(0x46); break; case 'G': SendCommand(0x47); break; case 'H': SendCommand(0x48); break; case 'I': SendCommand(0x49); break; case 'J': SendCommand(0x4A); break; case 'K': SendCommand(0x4B); break; case 'L': SendCommand(0x4C); break; case 'M': SendCommand(0x4D); break; case 'N': SendCommand(0x4E); break; case 'O': SendCommand(0x4F); break; case 'P': SendCommand(0x50); break; case 'Q': SendCommand(0x51); break; case 'R': SendCommand(0x52); break; case 'S': SendCommand(0x53); break; case 'T': SendCommand(0x54); break; case 'U': SendCommand(0x55); break; case 'V': SendCommand(0x56); break; case 'W': SendCommand(0x57); break; case 'X': SendCommand(0x58); break; case 'Y': SendCommand(0x59); break; case 'Z': SendCommand(0x5A); break; case '[': SendCommand(0x5B); break; case '\\': SendCommand(0x5C); break; case ']': SendCommand(0x5D); break; case '^': SendCommand(0x5E); break; case '_': SendCommand(0x5F); break; case '`': SendCommand(0x60); break; case 'a': SendCommand(0x61); break; case 'b': SendCommand(0x62); break; case 'c': SendCommand(0x63); break; case 'd': SendCommand(0x64); break; case 'e': SendCommand(0x65); break; case 'f': SendCommand(0x66); break; case 'g': SendCommand(0x67); break; case 'h': SendCommand(0x68); break; case 'i': SendCommand(0x69); break; case 'j': SendCommand(0x6A); break; case 'k': SendCommand(0x6B); break; case 'l': SendCommand(0x6C); break; case 'm': SendCommand(0x6D); break; case 'n': SendCommand(0x6E); break; case 'o': SendCommand(0x6F); break; case 'p': SendCommand(0x70); break; case 'q': SendCommand(0x71); break; case 'r': SendCommand(0x72); break; case 's': SendCommand(0x73); break; case 't': SendCommand(0x74); break; case 'u': SendCommand(0x75); break; case 'v': SendCommand(0x76); break; case 'w': SendCommand(0x77); break; case 'x': SendCommand(0x78); break; case 'y': SendCommand(0x79); break; case 'z': SendCommand(0x7A); break; case '{': SendCommand(0x7B); break; case '|': SendCommand(0x7C); break; case '}': SendCommand(0x7D); break; case '~': SendCommand(0x7E); break; case ' ': SendCommand(0x7F); break; case 'Ç': SendCommand(0x80); break; case 'ü': SendCommand(0x81); break; case 'é': SendCommand(0x82); break; case 'â': SendCommand(0x83); break; case 'ä': SendCommand(0x84); break; case 'à': SendCommand(0x85); break; case 'å': SendCommand(0x86); break; case 'ç': SendCommand(0x87); break; case 'ê': SendCommand(0x88); break; case 'ë': SendCommand(0x89); break; case 'è': SendCommand(0x8A); break; case 'ï': SendCommand(0x8B); break; case 'î': SendCommand(0x8C); break; case 'ì': SendCommand(0x8D); break; case 'Ä': SendCommand(0x8E); break; case 'Å': SendCommand(0x8F); break; case 'È': SendCommand(0x90); break; case 'æ': SendCommand(0x91); break; case 'Æ': SendCommand(0x92); break; case 'ô': SendCommand(0x93); break; case 'ö': SendCommand(0x94); break; case 'ò': SendCommand(0x95); break; case 'û': SendCommand(0x96); break; case 'ù': SendCommand(0x97); break; case 'ÿ': SendCommand(0x98); break; case 'Ö': SendCommand(0x99); break; case 'Ü': SendCommand(0x9A); break; case '¢': SendCommand(0x9B); break; case '£': SendCommand(0x9C); break; case '¥': SendCommand(0x9D); break; case '₧': SendCommand(0x9E); break; case 'ƒ': SendCommand(0x9F); break; case 'á': SendCommand(0xA0); break; case 'í': SendCommand(0xA1); break; case 'ó': SendCommand(0xA2); break; case 'ú': SendCommand(0xA3); break; case 'ň': SendCommand(0xA4); break; case 'Ň': SendCommand(0xA5); break; //case '': SendCommand(0xA6); break; was soll das sein? //case '': SendCommand(0xA7); break; die gibt es net case '¿': SendCommand(0xA8); break; case '⌐': SendCommand(0xA9); break; case '¬': SendCommand(0xAA); break; case '½': SendCommand(0xAB); break; case '¼': SendCommand(0xAC); break; case '¡': SendCommand(0xAD); break; case '«': SendCommand(0xAE); break; case '»': SendCommand(0xAF); break; case 'α': SendCommand(0xB0); break; case 'β': SendCommand(0xB1); break; case 'γ': SendCommand(0xB2); break; case 'Δ': SendCommand(0xB3); break; case 'ε': SendCommand(0xB4); break; case 'η': SendCommand(0xB5); break; case 'θ': SendCommand(0xB6); break; case 'λ': SendCommand(0xB7); break; case 'μ': SendCommand(0xB8); break; case 'π': SendCommand(0xB9); break; case 'ρ': SendCommand(0xBA); break; case 'σ': SendCommand(0xBB); break; case 'τ': SendCommand(0xBC); break; case 'φ': SendCommand(0xBD); break; case 'Ω': SendCommand(0xBE); break; case 'Σ': SendCommand(0xBF); break; case '§': SendCommand(0xC0); break; //case '': SendCommand(0xC1); break; gibbet //case '': SendCommand(0xC2); break; auch net case '∫': SendCommand(0xC3); break; //case '': SendCommand(0xC4); break; watn scheiß //case '': SendCommand(0xC5); break; nix da case '²': SendCommand(0xC6); break; case '³': SendCommand(0xC7); break; case 'ⁿ': SendCommand(0xC8); break; //eigentlich ein x - aber egal case '±': SendCommand(0xC9); break; case '√': SendCommand(0xCA); break; //case '': SendCommand(0xCB); break; alles leer //case '': SendCommand(0xCC); break; //case '': SendCommand(0xCD); break; //case '': SendCommand(0xCE); break; //case '': SendCommand(0xCF); break; case 'À': SendCommand(0xD0); break; case 'É': SendCommand(0xD1); break; case 'Ù': SendCommand(0xD2); break; case 'Ë': SendCommand(0xD3); break; case 'Ï': SendCommand(0xD4); break; case 'Â': SendCommand(0xD5); break; case 'Ê': SendCommand(0xD6); break; case 'Î': SendCommand(0xD7); break; case 'Ô': SendCommand(0xD8); break; case 'Û': SendCommand(0xD9); break; case 'ь': SendCommand(0xDA); break; case 'г': SendCommand(0xDB); break; case 'д': SendCommand(0xDC); break; case 'Ж': SendCommand(0xDD); break; case 'з': SendCommand(0xDE); break; case 'и': SendCommand(0xDF); break; case 'Й': SendCommand(0xD0); break; case 'Л': SendCommand(0xE1); break; case 'П': SendCommand(0xE2); break; case 'У': SendCommand(0xE3); break; case 'Ф': SendCommand(0xE4); break; case 'Ц': SendCommand(0xE5); break; case 'Ч': SendCommand(0xE6); break; case 'Ш': SendCommand(0xE7); break; case 'Щ': SendCommand(0xE8); break; case 'Ъ': SendCommand(0xE9); break; case 'Ы': SendCommand(0xEA); break; case 'Э': SendCommand(0xEB); break; case 'Ю': SendCommand(0xEC); break; case 'Я': SendCommand(0xED); break; //case '': SendCommand(0xEE); break; leer //case '': SendCommand(0xEF); break; case '≤': SendCommand(0xF0); break; case '≥': SendCommand(0xF1); break; case '≠': SendCommand(0xF2); break; //case '': SendCommand(0xF3); break; senkrecht gibt net case '∞': SendCommand(0xF4); break; case '≈': SendCommand(0xF5); break; case '≡': SendCommand(0xF6); break; //case '': SendCommand(0xF7); break; //case '': SendCommand(0xF8); break; case '←': SendCommand(0xF9); break; case '→': SendCommand(0xFA); break; //case '': SendCommand(0xFB); break; //case '': SendCommand(0xFC); break; //case '': SendCommand(0xFD); break; //case '': SendCommand(0xFE); break; //case '': SendCommand(0xFF); break; } } void PrintString(string value) { foreach (char c in value) { PrintChar(c); } } void DimDisplay(int percent) { percent = ((percent * 4) / 100) * 25; switch (percent) { case 100: SendCommand(0x04); SendCommand(0xFF); break; case 80: SendCommand(0x04); SendCommand(0x80); break; case 60: SendCommand(0x04); SendCommand(0x60); break; case 40: SendCommand(0x04); SendCommand(0x40); break; case 20: SendCommand(0x04); SendCommand(0x20); break; default: SendCommand(0x04); SendCommand(0x20); break; } } void Backspace() //Löscht des letzte Zeichen vor dem Cursor { SendCommand(0x08); } void Tab() //Cursor ein Feld weiter { SendCommand(0x09); } void LineFeed() //Cursor wechselt die Zeile bei selber Spalte { SendCommand(0x0A); } void CarriageReturn() //Cursor an den Anfang der aktuellen Zeile { SendCommand(0x0D); } void Reset() //Alle Zeichen werden gelöscht und der Cursor an den Anfang gesetzt { SendCommand(0x1F); } void SetCursorPosition(int row, int col) { if (row < 0) row = 0; if (row > 1) row = 1; if (col < 0) col = 0; if (col > 39) col = 39; SendCommand(0x10); SendCommand(40 * row + col); } void SetDisplayMode(bool scrolling, bool cursor) { if (scrolling) { SendCommand(0x12); } else { SendCommand(0x11); } if (cursor) { SendCommand(0x13); } else { SendCommand(0x14); } } private void button1_Click(object sender, EventArgs e) { PrintString(tbCommand.Text); } private void button2_Click(object sender, EventArgs e) { MessageBox.Show(Input(0x370).ToString()); } } }