Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2015, 21:15   #1
MastersWRC
Новичок
Джуниор
 
Регистрация: 12.03.2015
Сообщений: 3
Восклицание Не работает цикл

Консоль вытягивает из Блокнота введённые данные и записывает их в файл. Рабочий код:

Код:
using System;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;


class Program

{

const int PROCESS_WM_READ = 0x0010;
[DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

    [DllImport("kernel32.dll")]
    public static extern bool ReadProcessMemory(int hProcess, 
      int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
	
	
        
    static void Main()
	
    { 
	
	using (StreamWriter writer = new StreamWriter("O:\\out.txt"))
	{
	    Console.SetOut(writer);
	    Act();
		
	} 
  
} 
    static void Act()
	
	 {
	 
        Process process = Process.GetProcessesByName("notepad")[0]; 
        IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id); 

        int bytesRead = 0;
        byte[] buffer = new byte[24]; 
      
	  ReadProcessMemory((int)processHandle, 0x0034AAD0, buffer, buffer.Length, ref bytesRead);
  
		
        Console.WriteLine(Encoding.Unicode.GetString(buffer));
        
    }
	
}
Вопрос в бесконечном цикле. Если я его ставлю на Main:

Код:
using System;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;


class Program

{

const int PROCESS_WM_READ = 0x0010;
[DllImport("kernel32.dll")]
    public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

    [DllImport("kernel32.dll")]
    public static extern bool ReadProcessMemory(int hProcess, 
      int lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
	
	
        
    static void Main()
	
    { 
	for (;;){
	using (StreamWriter writer = new StreamWriter("O:\\out.txt"))
	{
	    Console.SetOut(writer);
	    Act();
		
	} 
  }
} 
    static void Act()
	
	 {
	 
        Process process = Process.GetProcessesByName("notepad")[0]; 
        IntPtr processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id); 

        int bytesRead = 0;
        byte[] buffer = new byte[24]; 
      
	  ReadProcessMemory((int)processHandle, 0x0034AAD0, buffer, buffer.Length, ref bytesRead);
  
		
        Console.WriteLine(Encoding.Unicode.GetString(buffer));
        
    }
	
}
То код компилируется, но перестаёт писать в файл... Поможете?
MastersWRC вне форума Ответить с цитированием
Старый 12.03.2015, 22:04   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Точно цикл виноват? Может уже и без цикла не работает? Например, потому что после перезапуска блокнота адрес стал уже не 0x0034AAD0
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.03.2015, 05:03   #3
MastersWRC
Новичок
Джуниор
 
Регистрация: 12.03.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Точно цикл виноват? Может уже и без цикла не работает? Например, потому что после перезапуска блокнота адрес стал уже не 0x0034AAD0
Однозначно: я блокнот не закрываю.
MastersWRC вне форума Ответить с цитированием
Старый 13.03.2015, 14:13   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

А зачем вам вообще цикл?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 13.03.2015, 14:37   #5
MastersWRC
Новичок
Джуниор
 
Регистрация: 12.03.2015
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
А зачем вам вообще цикл?
Есть программа, которая мониторит датчики ДВС через бортовой компутер. Эта прога мониторит сугубо для диагностики и внешний вид - соответствующий. Мне не нравится интерфейс и я могу его переделать. Для того чтобы его переделать мне необходимо в файл/реестр передавать значения датчиков, а уже оттуда я их заберу нужной мне программой. Если цикла не будет - один раз мне код скажет "850об/мин" и на этом всё. А так, мониторинг постоянный. Авто древнее - современного софта нет=(

На stackoverflow ели-ели выяснил что нужно переделать Main вот так:
PHP код:
using System;
using System.IO;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;

class 
Program
{

const 
int PROCESS_WM_READ 0x0010;
[
DllImport("kernel32.dll")]
    public static 
extern IntPtr OpenProcess(int dwDesiredAccessbool bInheritHandleint dwProcessId);

    [
DllImport("kernel32.dll")]
    public static 
extern bool ReadProcessMemory(int hProcess
      
int lpBaseAddressbyte[] lpBufferint dwSizeref int lpNumberOfBytesRead);
      
      
static 
void Main()
{
    try
    {
        
using (var sw = new StreamWriter("O:\\out.txt"))
        {
            
Console.SetOut(sw);
            while (
true)
            {
                
Act();
                
            }
        }
    }
    catch (
Exception e)
    {
        
Debug.WriteLine(e.Message);
    }
}
     
       
     
    static 
void Act()
 {
  
        
Process process Process.GetProcessesByName("notepad")[0]; 
        
IntPtr processHandle OpenProcess(PROCESS_WM_READfalseprocess.Id); 

        
int bytesRead 0;
        
byte[] buffer = new byte[8]; 
      
      
ReadProcessMemory((int)processHandle0x006EAB08bufferbuffer.Lengthref bytesRead);
  
        
Console.WriteLine("b" Encoding.Unicode.GetString(buffer) + "e");
           }
        

петля заработала! Но она не переписывает строчку, а ДОписывает её. И за 1 минуту там уже over9000 строк. Ну, думаю я это налажу. Если что - вернусь сюда, надеюсь поможете=)


P.S. Реально если интересует - скину ссыль с ютуба когда закончу.
MastersWRC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл не работает ? L6go1as C# (си шарп) 4 01.09.2013 14:39
Не работает цикл VASwko Общие вопросы C/C++ 9 23.05.2013 11:45
Не работает цикл -=DeS=- Общие вопросы Delphi 6 17.03.2013 14:45
Цикл не работает Faridik Общие вопросы по Java, Java SE, Kotlin 1 14.08.2011 12:14
Цикл не работает doniyor Общие вопросы Delphi 1 06.12.2009 15:52